const Router = require('koa-router')
const router = new Router()

/* //这些放在 app.js 
const fs = require('fs')
const os = require('os')
const path = require('path')
const koaBody = require('koa-body')
app.use(koaBody({ multipart: false }))
*/

//旧版本 var multer = require('koa-multer')
const multer = require('@koa/multer')

let storage = multer.diskStorage({
    //定义文件保存路径
    destination: function (req, file, cb) {
        cb(null, 'public/uploads/')
    },

    //保存文件规则： 时间_原始文件名 
    // + "." + fileFormat[fileFormat.length - 1] ,无需再处理格式和后缀
    filename: function (req, file, cb) {
        console.log("file===", file)
        var fileFormat = (file.originalname).split(".")
        cb(null, Date.now() + "_" + file.originalname
        )
    }
})

//如果目录不存在，会自动创建该目录
//自定义保存路径和文件名规则
const upload = multer({ storage: storage })
//上传到当前应用的 uploads 目录，文件名随机
//const upload = multer({ dest: 'uploads/' })
//上传到当前应用的 public/uploads 目录 ，，文件名随机 
//const upload = multer({ dest: 'public/uploads/' })

//使用 multer 方法
router.get('/upload', async (ctx, next) => {
    await next()

    await ctx.render('upload', {
        title: 'multer 方式，文件上传实例'
    }
    )
});

//使用 koa baody 方法
router.get('/upload2', async (ctx, next) => {
    await next()

    await ctx.render('upload', {
        title: 'koaBody 方式文件上传实例'
    }
    )
});

router.post('/file_upload2', upload.single('image'),
    ctx => {
        //console.log('ctx.request.file', ctx.request.file)
        console.log('ctx.file', ctx.file)

        ctx.body = {
            status: 'multer 方式，上传成功啦>>>',
            文件名filename: ctx.file.filename,
            保存路径filepath: ctx.file.path,
            文件大小filesize: ctx.file.size,
            文件类型type: ctx.file.minetype
        }
    }
)

// 这个方式使用 koaBody 中间件 以及 fs，path，os
const fs = require('fs')
const os = require('os')
const path = require('path')
const koaBody = require('koa-body')({
    multipart: true,  // 允许上传多个文件
    formidable: {
        uploadDir: 'public/uploads',// 上传的文件存储的路径 
        keepExtensions: true  //  保存图片的扩展名
    }
})

router.post('/file_upload', koaBody, (ctx) => {
    //选择的文件在 ctx.request.files 里面
    //其他的 输入和 普通 post一样，在 ctx.request.body
    //console.log("ctx.request.body==",ctx.request.body)

    //console.log("ctx.request.files==",ctx.request.files)

    //文件信息对应 <input type="file" name="image" size="50" />  的 name
    //console.log("ctx.request.files.image==",ctx.request.files.image)

    const file = ctx.request.files.image
    console.log("file.path===", file.path)
    console.log("file.name===", file.name)
    console.log("file.size===", file.size)
    console.log("file.type===", file.type)

    const reader = fs.createReadStream(file.path)
    const stream = fs.createWriteStream(path.join(os.tmpdir(), Math.random().toString()))
    reader.pipe(stream)
    console.log('uploading %s -> %s', file.name, stream.path)

    ctx.body = {
        status: 'koaBody 方式，上传成功啦>>>',
        文件名filename: file.name,
        保存路径filepath: file.path,
        文件大小filesize: file.size,
        文件类型type: file.type
    }

}
)

module.exports = router;

